(レポート) BDT320: ストリームデータフローと Amazon Kinesis Firehose、Amazon Kinesis Analytics #reinvent
ウィスキー、シガー、パイプをこよなく愛する大栗です。 re:Invent 2015でKinesis FirehoseとKinesis Analyticsのセッションに参加したのでレポートします。
Amazon Kinsisについて
- コンセプト
- S3とRedshiftへのエクスペリエンス
- データのプットにAmazon Kinesis AgentとKey APIを使用する
- 価格
- データ配信のパターン
- keyメトリクスへの理解
- トラブルシューティング
ストリームデータのAWS流のやり方
- プロビジョン、デプロイ、管理が簡単
- エラスティックに拡張可能
- リアルタイムなレイテンシ
- 使った分だけ支払う、先払い無し
- 特定のユースケースに対する正しいサービス
re:Invent 2013時点のKinesis Streams
発表時点では、以下のような構成でした。
Kinesisを使用したケーススタディ
日本企業では、GREE様、ガリバー様、スシロー様が紹介されています。
Amazon Kinesis Streamsの新しい機能
- New:PutRecords APIで500レコード、5MBのペイロード
- Update 2015:個別の最大ペイロードが50KBから1MBへ増加
- Update 2015:エンドツーエンドの伝播時間の削減
- Update 2015:Kinesis Client LibraryがPython、Node.js、Ruby ...
- New:Kinesis Producer Library
- New:サーバサイド・タイムスタンプ
- New:保持期間が24時間から7日へ拡張
Amazon Kinesis Streams
- 簡単な管理
- リアルタイムアプリケーションの構築
- 低価格
スシロー:回転寿司レストラン
スシロー様の例のご紹介です。
Amazon Kinesis Firehose
Amazon Kinesis Firehoseには以下の特徴があります。
- 管理無し
- ダイレクト・ツー・データの統合
- シームレスな伸縮性
3個の単純なコンセプトとして、 デリバリ・ストリーム、レコード、データ・プロデューサ、があります。
Amazon Kinesis Firehose to Redshift
Redshiftへ保存するには2つのステップがあります。
- 途中の宛先としてS3バケットを使います。 ・最も効果的な方法はRedshiftへ大規模のロードです ・S3は一切データが消えず、いつも安全で、使用可能です
- FirehoseがCOPYコマンドを同期的に発行します。前回のCOPYコマンドが終了しACKが戻ると継続的にCOPYコマンドを発行します。
Amazon Kinesis Agent
ソフトェア・エージェントでFirehoseへのデータ送信が簡単になります。
- ファイルを監視して新しいデータレコードをデリバリ・ストリームへ送信します
- ファイルのローテーション、チェックポイント、失敗時のリトライをハンドリングします
- 信頼でき、タイムリーに簡単な方法で全データを送ります
- CloudWatchメトリクスは監視とストリーミングプロセスの障害対応に役立ちます。
Amazon Kinesis FirehoseのAPI概要
- CreateDeliveryStream:デリバリ・ストリームを作成します
- DeleteDeliveryStream:デリバリ・ストリームを削除します
- DescribeDeliveryStream:デリバリ・ストリームの説明と設定情報を表示します
- ListDeliveryStreams:デリバリ・ストリームを一覧を表示します
- UpdateDestination:デリバリ・ストリームが配置するS3バケットの情報を更新します
- PutRecord:1つのデータ(1000KBまで)をデリバリストリームへプットします
- PutRecordBatch:複数のデータ(500レコードか5MBまで)をデリバリストリームへプットします
Amazon Kinesis Firehoseの価格
シンプルで、使った分だけ支払い、先払い無しです。 1GBのデータ処理当たり、$0.035です。
Amazon Kinesis FirehoseとAmazon Kinesis Streams?
- amazon Kinesis Streamsはカスタム処理が必要な場合のサービスです。入力データごとに1秒以下のレイテンシで、ストリーム処理のフレームワークを選択できます。
- amazon Kinesis Firehoseは管理無しで、S3やRedshiftを使った既存の分析ツールが使用可能で、そしてデータのレイテンシが60秒以上の場合のサービスです。
Amazon Kinesis Firehoseの詳細
Amazon S3へのデータ送信方法
S3オブジェクトのサイズと頻度をコントロール
- 1つのデリバリ・ストリームは1つのS3バケットへ
- バッファサイズとインターバルで送信のサイズと頻度をコントロールできます
- バッファサイズ - 1〜128MB
- バッファインターバル - 60〜900秒
- FIrehoseが各レコードをつの大きなオブジェクトへ結合します
- 最初にトリガーの条件を満たすのレコードを送信します
- バッファしたした後に圧縮
- GZIP、ZAIP、SNAPPY
- 送信されたS3オブジェクトはFirehoseへ投入された全データより小さくなります
- Amazon RedshiftではGZIPのみサポートしています。
AWS IAM Roleと暗号化
- FirehoseにはS3バケットへアクセスするIAM Roleが必要です
- KMSを使ったデータ暗号化
S3オブジェクトの命名規則
- Amazon S3へ置く前にUTCでYYYY/MM/DD/HHのプレフィックスがつきます
- 上位のフォルダにS3プレフィックスを指定します
- 名前のパターンは"デリバリ・ストリーム名-デリバリ・ストリームバージョンYYYY-MM-DD-SS-ランダム文字列"です。
FirehoseがS3へ接続出来ない場合
- FirehoseでS3バケットへ接続出来ない場合、問題が解決するまで55分毎にリトライします
- Firehoseはデータを24時間保存します
- S3バケットが使用できて追いつくとすぐに再開されます
- 24時間以上アクセス出来ないとデータが消えます
Amazon Redshiftへのデータ送信方法
あなたの代わりに2ステップを実行します
- 途中の宛先としてS3バケットを使います。
- FirehoseがCOPYコマンドを同期的に発行します。前回のCOPYコマンドが終了しACKが戻ると継続的にCOPYコマンドを発行します。
Redshiftクラスタへロードする頻度
- S3への送信は元になります - バッファサイズとインターバル
- RedshftのCOPYコマンドの頻度
- 効果的にするにはFirehoseでマニフェスト・コピーを使います
もしRedshiftクラスタへアクセス出来ない場合
- Firehoseがクラスタへアクセス出来ない場合は5分毎にリトライします
- 60分アクセス出来ない場合は、現在のS3オブジェクトのバッチを飛ばして次へ移ります
- 飛ばしたオブジェクト情報はエラーフォルダにマニフェストファイルとしてS3バケットに送ります。手動で適切な戻しをするために情報を使用して下さい
Amazon Kinesis Firehoseのメトリクス
S3へロードする場合のメトリクス
- Incoming.Bytes
- Incoming.Records
- DeliveryToS3.Bytes
- DeliveryToS3.DataFreshness
- DeliveryToS3.Records
- DeliveryToS3.Success
Redshiftへロードする場合のメトリクス
- DeliveryToRedshift.Bytes
- DeliveryToRedshift.Records
- DeliveryToRedshift.Success
Amazon Kinesis Analytics
標準SQLを使ってストリームデータを継続的に分析できます
- ストリームにSQLを設定:データストリームに簡単につなげて、既存のSQLのスキルを当てはめます。
- リアルタイムアプリケーションを構築:ストリーム・ビッグデータに対して1秒以下のレイテンシで継続的に処理を実行します。
- エラスティックにスケール:管理者不在で適合したデータのスループットをエラスティックにスケールします。
さいごに
今回のre:InventではKinesisについて多くのアップデートが発表されました。今まで以上にIoTやデータ分析に適用できる場面が増えたので、実案件での使用例が増えると期待しています。